package com.huiying.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huiying.entity.entity.Message;

import java.util.List;

/**
 * 消息服务接口
 * 继承 MyBatis-Plus 的 IService 接口，提供通用 CRUD 操作
 */
public interface MessageService extends IService<Message> {

    /**
     * 根据会话ID获取聊天历史消息
     *
     * @param conversationId 会话ID
     * @param page           页码 (从0开始)
     * @param size           每页数量
     * @return 消息列表，按时间倒序排列
     */
    List<Message> getConversationHistory(Long conversationId, int page, int size);

    /**
     * 标记指定消息为已读状态
     *
     * @param messageId 消息ID
     * @param readerId  读取消息的用户ID (接收者ID)
     * @return 是否成功标记为已读
     */
    boolean markMessageAsRead(Long messageId, Long readerId);

    /**
     * 获取指定用户的离线消息（状态为 SENT 或 DELIVERED 且接收者为该用户）
     *
     * @param userId 接收离线消息的用户ID
     * @return 离线消息列表
     */
    List<Message> getOfflineMessages(Long userId);

    /**
     * 更新消息的状态
     *
     * @param messageId 消息ID
     * @param newStatus 新的消息状态
     * @return 是否成功更新状态
     */
    boolean updateMessageStatus(Long messageId, Message.MessageStatus newStatus);

    /**
     * 用户上线时，推送其离线消息，并更新消息状态为 DELIVERED
     *
     * @param userId 上线用户的ID
     */
    void pushOfflineMessages(Long userId);

    void saveMessage(Message message);
}